Amazon QuickSight ダッシュボード・分析・データセット一式をクロスアカウント移行してみた
本記事では、Amazon QuickSight の Assets as Bundle (AaB) 機能を使用し、ダッシュボードを別の AWS アカウントに移行する方法を説明します。
Icons made by Freepik from Flaticon
以下のブログで紹介されている機能を使ったアカウントまたぎ移行をします。
検証環境
- データソース
- S3 上の CSV ファイル
- データフロー
- S3 → Athena → SPICE(QuickSight)
- 可視化
- QuickSight でデータを可視化
※ データソースは移行先のアカウントで新規に作成し直します。
QuickSight の構成
1つのデータセットをソースにした分析が2つあります。その分析からは各ダッシュボードを作成しています。
今回はダッシュボード1を対象にして、その関連アセットも移行できるのか試しました。
Icons made by Freepik from Flaticon
移行手順
1. 移行元アカウントでの作業
このセクションでは、移行元の AWS アカウントでの作業を説明します。
主な手順は以下の通りです。
- 移行対象のダッシュボードを選択
- 選択したダッシュボードのアセットをエクスポート
- エクスポートしたアセットファイルを保存(後で移行先アカウントでインポートに使用)
Icons made by Freepik from Flaticon
1.1 移行対象ダッシュボードのARNを確認
以下のコマンドを実行して、移行したいダッシュボードの ARN を確認します。
SOURCE_ACCOUNT_ID=7111111111111
aws quicksight list-dashboards --aws-account-id $SOURCE_ACCOUNT_ID | jq '.DashboardSummaryList[] | {Name, Arn}'
コマンド実行結果
{
"Name": "ダッシュボード2",
"Arn": "arn:aws:quicksight:ap-northeast-1:7111111111111:dashboard/020acbd8-4a51-4300-b67a-6144379a1912"
}
{
"Name": "ダッシュボード1",
"Arn": "arn:aws:quicksight:ap-northeast-1:7111111111111:dashboard/f83a938f-9e7d-4f80-87d4-35d8d17a5520"
}
1.2 エクスポート設定ファイルの作成
input.json
という名前のファイルを作成し、以下の内容を記述します。
AwsAccountId
は移行元のアカウント ID を入力AssetBundleExportJobId
は任意の名前を入力ResourceArns
は移行したいダッシュボードの ARN を入力
{
"AwsAccountId": "7111111111111",
"AssetBundleExportJobId": "test-export-1",
"ResourceArns": [
"arn:aws:quicksight:ap-northeast-1:7111111111111:dashboard/f83a938f-9e7d-4f80-87d4-35d8d17a5520"
],
"IncludeAllDependencies": true,
"IncludePermissions": true,
"ExportFormat": "QUICKSIGHT_JSON"
}
1.3 エクスポートの実行
以下のコマンドを実行して、エクスポートジョブを開始します。
aws quicksight start-asset-bundle-export-job --cli-input-json file://input.json
1.4 エクスポートジョブの状態確認とダウンロード
エクスポートジョブの状態を確認し、ダウンロード URL を取得するために以下のコマンドを実行します。
EXPORT_JOB_ID=test-export-1
aws quicksight describe-asset-bundle-export-job --aws-account-id $SOURCE_ACCOUNT_ID --asset-bundle-export-job-id $EXPORT_JOB_ID
コマンド実行結果に含まれるDownloadUrl
をコピーし、Web ブラウザでアクセスすると、アセットファイルをダウンロードできます。
2. 移行先アカウントでの作業
移行先の AWS アカウントでの主な作業は以下の通りです。
- QuickSight ユーザーの確認
- パラメータ上書き用ファイルの作成
- エクスポートしたアセットのインポート
これらの手順で、ダッシュボードと関連リソースを新アカウントに移行します。
Icons made by Freepik from Flaticon
2.1 QuickSightユーザーの確認
移行先アカウントの QuickSight ユーザーを確認するために、以下のコマンドを実行します。
TARGET_ACCOUNT_ID=222222222222
aws quicksight list-users --aws-account-id $TARGET_ACCOUNT_ID --namespace default
コマンド実行結果から、インポートするアセットの所有者にするユーザーのArn
を確認します。
{
"UserList": [
{
"Arn": "arn:aws:quicksight:ap-northeast-1:222222222222:user/default/AWSReservedSSO_AdministratorAccess_44444444444444/YasutakaOhmura",
"UserName": "AWSReservedSSO_AdministratorAccess_44444444444444/YasutakaOhmura",
"Email": "abashiri@example.com",
"Role": "ADMIN",
"IdentityType": "IAM",
"Active": true,
"PrincipalId": "federated/iam/AAAAAAAAAAAAAAAA:YasutakaOhmura"
}
],
"Status": 200,
"RequestId": "f8a20760-47ae-4e1d-bdb7-1a0bc8a4b918"
}
2.2 権限上書きファイルの作成
import-override-permission.json
という名前のファイルを作成します。Principals
の値は「2.1 QuickSight ユーザーの確認」で確認したArn
を入力します。
以下の JSON ファイルはこちらのドキュメントを参考にしました。
{
"DataSources": [
{
"DataSourceIds": ["*"],
"Permissions": {
"Principals": ["arn:aws:quicksight:ap-northeast-1:222222222222:user/default/AWSReservedSSO_AdministratorAccess_40e26c4a003f92cc/YasutakaOhmura"],
"Actions": [
"quicksight:UpdateDataSourcePermissions",
"quicksight:DescribeDataSourcePermissions",
"quicksight:PassDataSource",
"quicksight:DescribeDataSource",
"quicksight:DeleteDataSource",
"quicksight:UpdateDataSource"
]
}
}
],
"DataSets": [
{
"DataSetIds": ["*"],
"Permissions": {
"Principals": ["arn:aws:quicksight:ap-northeast-1:222222222222:user/default/AWSReservedSSO_AdministratorAccess_40e26c4a003f92cc/YasutakaOhmura"],
"Actions": [
"quicksight:DeleteDataSet",
"quicksight:UpdateDataSetPermissions",
"quicksight:PutDataSetRefreshProperties",
"quicksight:CreateRefreshSchedule",
"quicksight:CancelIngestion",
"quicksight:PassDataSet",
"quicksight:ListRefreshSchedules",
"quicksight:UpdateRefreshSchedule",
"quicksight:DeleteRefreshSchedule",
"quicksight:DescribeDataSetRefreshProperties",
"quicksight:DescribeDataSet",
"quicksight:CreateIngestion",
"quicksight:DescribeRefreshSchedule",
"quicksight:ListIngestions",
"quicksight:DescribeDataSetPermissions",
"quicksight:UpdateDataSet",
"quicksight:DeleteDataSetRefreshProperties",
"quicksight:DescribeIngestion"
]
}
}
],
"Themes": [
{
"ThemeIds": ["*"],
"Permissions": {
"Principals": ["arn:aws:quicksight:ap-northeast-1:222222222222:user/default/AWSReservedSSO_AdministratorAccess_40e26c4a003f92cc/YasutakaOhmura"],
"Actions": [
"quicksight:ListThemeVersions",
"quicksight:UpdateThemeAlias",
"quicksight:DescribeThemeAlias",
"quicksight:UpdateThemePermissions",
"quicksight:DeleteThemeAlias",
"quicksight:DeleteTheme",
"quicksight:ListThemeAliases",
"quicksight:DescribeTheme",
"quicksight:CreateThemeAlias",
"quicksight:UpdateTheme",
"quicksight:DescribeThemePermissions"
]
}
}
],
"Analyses": [
{
"AnalysisIds": ["*"],
"Permissions": {
"Principals": ["arn:aws:quicksight:ap-northeast-1:222222222222:user/default/AWSReservedSSO_AdministratorAccess_40e26c4a003f92cc/YasutakaOhmura"],
"Actions": [
"quicksight:RestoreAnalysis",
"quicksight:UpdateAnalysisPermissions",
"quicksight:DeleteAnalysis",
"quicksight:DescribeAnalysisPermissions",
"quicksight:QueryAnalysis",
"quicksight:DescribeAnalysis",
"quicksight:UpdateAnalysis"
]
}
}
],
"Dashboards": [
{
"DashboardIds": ["*"],
"Permissions": {
"Principals": ["arn:aws:quicksight:ap-northeast-1:222222222222:user/default/AWSReservedSSO_AdministratorAccess_40e26c4a003f92cc/YasutakaOhmura"],
"Actions": [
"quicksight:DescribeDashboard",
"quicksight:ListDashboardVersions",
"quicksight:UpdateDashboardPermissions",
"quicksight:QueryDashboard",
"quicksight:UpdateDashboard",
"quicksight:DeleteDashboard",
"quicksight:DescribeDashboardPermissions",
"quicksight:UpdateDashboardPublishedVersion",
"quicksight:UpdateDashboardLinks"
]
}
}
]
}
2.3 インポートの実行
以下のコマンドを実行して、インポートジョブを開始します。
IMPORT_JOB_ID="test-import-1"
ASSET_BUNDLE_FILE="assetbundle-test-export-1.qs"
PERMISSIONS_FILE="import-override-permission.json"
aws quicksight start-asset-bundle-import-job \
--aws-account-id "$TARGET_ACCOUNT_ID" \
--asset-bundle-import-job-id "$IMPORT_JOB_ID" \
--asset-bundle-import-source-bytes "fileb://$ASSET_BUNDLE_FILE" \
--override-permissions "file://$PERMISSIONS_FILE"
2.4 インポート結果の確認
インポートジョブの結果を確認するために、以下のコマンドを実行します。
aws quicksight describe-asset-bundle-import-job --aws-account-id $TARGET_ACCOUNT_ID --asset-bundle-import-job-id $IMPORT_JOB_ID
2.5 QuickSight から確認
マネジメントコンソール から QuickSight を開き、ダッシュボード、分析、データセットが正しく移行されていることを確認します。
データソースが正しく設定されていないため、データセットの更新に失敗します。
3. データソースの再設定
このセクションでは、移行後のデータソース設定手順を説明します。
- 移行先アカウントでの Athena 設定
- QuickSight のデータセット更新
Icons made by Freepik from Flaticon
3.1 Athena 再設定
移行先アカウントの Athena で、移行元と同名のデータベースとデータソースを作成します。
3.2 データセット更新
データセットを更新します。成功すれば無事移行完了です。
4. 確認
最後にダッシュボードが正しく表示されることを確認します。
以上で、Amazon QuickSight のクロスアカウント移行手順は完了です。この手順を参考に、効率的な QuickSight アセットの管理を行ってください。
付録
アセットバンドルの中身
ダウンロードしたアセットファイルを展開すると、データセットなどのアセットの情報が JSON ファイルになっています。
unzip assetbundle-test-export-1.qs
解凍後のファイル構造は以下のようになります。
$ tree
.
├── analysis
│ └── 895fad08-f210-4a09-9d7e-2883c73611f2.json
├── assetbundle-test-export-1.qs
├── dashboard
│ └── f83a938f-9e7d-4f80-87d4-35d8d17a5520.json
├── dataset
│ └── dbafcc53-9231-403f-9fcb-52990a458a52.json
├── datasource
│ └── 4a4a4c57-0bb8-46fa-956c-27f571c1c028.json
└── info.json
展開した JSON ファイルを直接使用することはありませんでした。
おわりに
本記事では、Amazon QuickSight の Assets as Bundle (AaB) 機能を使用したクロスアカウント移行の手順を解説しました。この方法を活用することで、効率的に QuickSight のアセットを異なるアカウントへダッシュボードの移行が可能になります。